import java.util.Scanner;
//运算符和逻辑控制
public class Test {
    /**
     * 逻辑控制 选择结构if else switch case 循环结构 for while do{}while()
     * @param args
     */
    /**
     * 循环结构 for while do{}while()
     * @param args
     * 1.有初始值
     * 2.有结束条件
     * 3.逐渐接近结束条件
     */
    public static void main(String[] args) {
        /**
         * while循环
         * 语法 while(布尔表达式) {循环体;};
         * 恒为真,则死循环
         */
        //求0-100之和
        int num = 0;
        int sum = 0;

        while(num <= 100) {
            sum += num;
            num++;
        }

        System.out.println(sum);
    }
    public static void main14(String[] args) {
        //分号问题,逻辑控制语句,多添加;,导致语句变成单个语句
        int x = 20;
        if (x == 10);
        {
            System.out.println("hehe");
        }

        //悬垂else问题: 就近对齐,尽量一个if一个{}
        x = 10;
        int y = 10;
        if (x == 10)
            if (y == 10)
                System.out.println("aaa");
            else
                System.out.println("bbb");
    }
    public static void main13(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int year = scanner.nextInt();
        if (year % 100 == 0) {
            // 判定世纪闰年
            if (year % 400 == 0) {
                System.out.println("是闰年");
            } else {
                System.out.println("不是闰年");
            }
        } else {
            // 普通闰年
            if (year % 4 == 0) {
                System.out.println("是闰年");
            } else {
                System.out.println("不是闰年");
            }
        }
    }
    public static void main12(String[] args) {
        /**
         * 选择结构,分支结构 单分支 双分支 多分支 switch语句
         * if(boolean表达式) {语句 },双,多分支如单分支
         */
//        int a = 10;
//
//        //单分支
//        if(a == 10) {
//            System.out.println(a);
//        }
//
//        //双分支
//        if(a == 10) {
//            System.out.println("a == " + a);
//        }else {
//            System.out.println("....");
//        }
//
//        //多分支
//        if(a == 10) {
//            System.out.println("a == " + a);
//        }else if(a > 10){
//            System.out.println("....");
//        }else {
//            System.out.println("????");
//        }

        /**
         * switch语句
         * 不能作为switch参数的类型有 float double long boolean
         * switch退出的条件为,遇到break,或全部执行完结束
         * case后常量值,不能重复
         * 能作为参数的引用类型为 String,枚举
         * 参数不支持复杂表达式(与if语句的区别)
         * 不建议嵌套
         */
        String str = "abc";
        switch(str)
        {
            case "abc":
                System.out.println("abc");
                break;
            case "123":
                System.out.println("123");
                break;
            default:
                System.out.println("输入有误 请重新输入!");
                break;
        }
    }

    /**
     * 运算符 算术运算 关系运算 逻辑运算 位运算 移位运算 条件运算
     * @param args
     */
    /**
     * 运算符优先级
     * 根据实际情况,进行加(),调整优先级即可.
     */
    /**
     * 条件运算符(三目运算符)
     */
    public static void main11(String[] args) {
        /**
         * 表达式1 ? 表达式2 : 表达式3
         * 表达式1,必须为boolean表达式
         * 如果表达式1为真,执行表达式2,为假,执行表达式3
         * 注: 1.表达式2 3 必须为同类型,否则会发生整型提升,除非会发生隐式类型转换
         * 2.表达式不能单独存在,结果必须被引用
         */
        int a = 10;
        int b = 20;
        int max = a > b ? a : b;
        System.out.println(max);
    }

    /**
     * 移位运算符 >> << >>>
     * 针对二进制位
     */
    public static void main10(String[] args) {
        /**
         * >> 右移
         * 向右移动一位,左边补符号位
         * 相当于 值 / 2 ^n位
         */
        int a1 = 0x10;
        System.out.printf("%x\n", a1 >> 1);//8
        /**
         * >>> 无符号右移
         * 向右移动一位,左边补0
         */
        int a2 = 0xffffffff;
        System.out.printf("%x\n", a2 >>> 1);//7fffffff
        /**
         * << 左移
         * 向左移动一位,右边补0
         * 相当于 值 * 2^n位
         */
        int a3 = 0x10;
        System.out.printf("%x\n", a3 << 1);//20
    }

    /**
     * 逻辑运算符 && || !
     * 都是针对表达式,且表达式必须为boolean表达式
     */
    public static void main9(String[] args) {
        /**
         * ! 逻辑否
         * !表达式,真->假 假->真
         */
        int a = 1;
        System.out.println(!(a == 1)); // a == 1 为true，取个非就是false
        System.out.println(!(a != 1)); // a != 1 为false，取个非就是true
    }
    public static void main8(String[] args) {
        /**
         * || 逻辑或
         * 表达式1 || 表达式2
         * 一个为真,则结果为真
         * 短路或: 如果表达式1为真,则求表达式2结果,直接为真
         */
        int a = 1;
        int b = 2;
        System.out.println((a == 1) || (b == 2)); //true
        System.out.println(a == 1 || b > 100); //true
        System.out.println(a > 100 || b == 2); //true
        System.out.println(a > 100 || b > 100);//false
        System.out.println(a == 1 || (10 / 0) == 0);//true
    }
    public static void main6(String[] args) {
        /**
         * && 逻辑与
         * 表达式1 && 表达式2
         * 如果同时为真,则为真,有一个为假,则为假
         * 短路与: 如果表达式1为假,则不去求表达式2,结果直接为false
         */
        int a = 1;
        int b = 2;
        System.out.println(a == 1 && b == 2); // 左为真 且 右为真 则结果为真
        System.out.println(a == 1 && b > 100); // 左为真 但 右为假 则结果为假
        System.out.println(a > 100 && b == 2); // 左为假 但 右为真 则结果为假
        System.out.println(a > 100 && b > 100); // 左为假 且 右为假 则结果为假
        System.out.println(a > 1 && (10 / 0) == 0);//false
    }

    /**
     * 位运算符 & | ~ ^
     * 针对二进制位
     */
    public static void main5(String[] args) {
        int a = 10;
        int b = 20;
        /**
         * & 按位与
         *  相同为1,不同为0
         */
        System.out.println(a & b);

        /**
         * | 按位或
         * 有1为1,全为0为0
         */
        System.out.println(a | b);

        /**
         * ~ 按位取反
         * 0->1 1->0
         */
        System.out.println(~0xf);
        /**
         * ^ 按位异或
         * 相同为0,不同为1
         */
        System.out.println(a ^ b);
    }

    /**
     * 关系运算 == != >= <= >  <
     * 结果只有true false
     */
    public static void main4(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a == b); // false
        System.out.println(a != b); // true
        System.out.println(a < b); // true
        System.out.println(a > b); // false
        System.out.println(a <= b); // true
        System.out.println(a >= b); // false
    }

    /**
     * 算术运算 基本四则运算(+ - * / %) 增量运算(+= -= /= *= %=) 自增自减运算(++ --)
     */
    public static void main3(String[] args) {
        /**
         * 自增自减运算 ++ --
         * 本质上,变量本身都会增加或减少,真正影响的是,进行运算时,变量使用的是改变前,还是改变后的值
         */
        //特殊情况
        int a = 10;
        a = a++;
        System.out.println(a);//10
    }
    public static void main2(String[] args) {
        /**
         * 增量运算 += -= *= /= %=
         * 实质上为 a = a + b
         * 注:常量不能使用增量运算
         */
        int a = 10;
        a += 10;
        System.out.println(a);
    }
    public static void main1(String[] args) {
        /**
         * 1.整数相/时,结果为整数
         * 2.分母不能为0
         * 3.是否为负,符合正常计算
         */
        System.out.println(7 / 2);//整数结果为整数
//        System.out.println(2 / 0);//error

        /**
         * %运算
         * 1.可以进行浮点数运算
         * 2.是否为负,由分子决定,分子为负,结果为负,分子为正,结果为正
         * 3.右操作数不能为0
         */
        System.out.println(10.5 % 2);
        System.out.println(7 % 2);
        System.out.println(7 % -2);
        System.out.println(-7 % 2);
        System.out.println(-7 % -2);
//        System.out.println(2 % 0);//error
    }
}
